USE [MIS_GRUPO_07]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

IF OBJECT_ID ('dbo.GetBarrio', 'P') IS NOT NULL DROP PROCEDURE dbo.GetBarrio;
GO
CREATE PROCEDURE dbo.GetBarrio (@Lat decimal(10,6), @Lon decimal(10,6), @Barrio nvarchar (50) OUTPUT) 
AS
BEGIN
	-- Retornar el barrio mas cercano al punto pasado como parametro. 
	-- Optimizacion: no es necesario hacer la raiz cuadrada.
	 
		 SELECT TOP 1 @Barrio = barrio FROM [dbo].[AUX_Coordinates_to_Barrio]
		 ORDER BY (@Lat - cLat)*(@Lat - cLat) + (@Lon - cLon)*(@Lon - cLon) ASC

	 
END;
GO


IF OBJECT_ID ('dbo.GetRangoEdad', 'P') IS NOT NULL DROP PROCEDURE dbo.GetRangoEdad;
GO
CREATE PROCEDURE dbo.GetRangoEdad (@Edad int,@RangoEdad char(10) OUTPUT) 
AS
BEGIN
	-- Retornar el barrio mas cercano al punto pasado como parametro. 
	-- Optimizacion: no es necesario hacer la raiz cuadrada.
	 
		 SELECT TOP 1 @RangoEdad = rangoEdad FROM [dbo].[AUX_Rango_Edad]
		 WHERE @Edad between edadDesde and edadHasta

	 
END;
GO


IF OBJECT_ID ('dbo.GetDistanciaRecorrida', 'P') IS NOT NULL DROP PROCEDURE dbo.GetDistanciaRecorrida;
GO
CREATE PROCEDURE dbo.GetDistanciaRecorrida (@EstacionOrigen int, @EstacionDestino int, @Distancia decimal (10,4) OUTPUT) 
AS
BEGIN

DECLARE @latA decimal(20,10)
DECLARE @latB decimal(20,10)
DECLARE @lonA decimal(20,10)
DECLARE @lonB decimal(20,10)

SELECT @latA = latitud FROM DIM_Estacion WHERE estacionID = @EstacionOrigen 
SELECT @lonA = longitud FROM DIM_Estacion WHERE estacionID = @EstacionOrigen 

SELECT @latB = latitud FROM DIM_Estacion WHERE estacionID = @EstacionDestino 
SELECT @lonB = longitud FROM DIM_Estacion WHERE estacionID = @EstacionDestino 

SET @latA = @latA *PI()/180
SET @latB = @latB *PI()/180
SET @lonA = @lonA *PI()/180
SET @lonB = @lonB *PI()/180

SELECT @Distancia = 6372.795477598 * acos (sin (@latA) * sin (@latB) + cos (@latA) * cos (@latB) * cos (@lonA-@lonB)) 

	 
END;
GO



